**SQL
Server中identity(自增)的用法**
# 目录
[**SQL Server中identity(自增)的用法** 1](#_Toc8737614)
[**零、码仙励志** 1](#_Toc8737615)
[**一、identity的基本用法** 1](#t0)
[**1.含义** 1](#t2)
[**2.语法** 1](#t3)
[**3.实例演示** 1](#t4)
[**4.删除一条记录接着插入** 3](#t5)
[**二、重新设置identity的值** 3](#t6)
[**1.语法** 3](#t7)
[**2.实例演示** 4](#t8)
[**三、向identity字段插入数据** 4](#t9)
[**1.语法** 4](#t10)
[**2.实例演示** 5](#t11)
**
**
**一、identity的基本用法**
**1.含义**
identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错
**2.语法**
列名 数据类型 约束 identity(m,n)
m表示的是初始值,n表示的是每次自动增加的值
如果m和n的值都没有指定,默认为(1,1)
要么同时指定m和n的值,要么m和n都不指定,不能只写其中一个值,不然会出错
**3.实例演示**
不指定m和n的值
1. > create table student1
2. > (
3. > sid int primary key identity,
4. > sname nchar(8) not null,
5. > ssex nchar(1)
6. > )
7. > insert into student1(sname,ssex) values ('张三','男');
8. > insert into student1 values ('李四','女');*--可以省略列名*
9. > insert into student1 values ('王五','女');

指定m和n的值
1. > create table student2
2. > (
3. > sid int primary key identity(20,5),
4. > sname nchar(8) not null,
5. > ssex nchar(1)
6. > )
7. > insert into student2(sname,ssex) values ('张三','男');
8. > insert into student2 values ('李四','女');*--可以省略列名*
9. > insert into student2 values ('王五','女');

**4.删除一条记录接着插入**
把sid为2的记录删除,继续插入,新插入的记录的sid不是2,而是3
1. > create table student3
2. > (
3. > sid int primary key identity,
4. > sname nchar(8) not null,
5. > ssex nchar(1)
6. > )
7. > insert into student3(sname,ssex) values ('张三','男');
8. > insert into student3 values ('李四','女');
9. > delete from student3 where sid=2;*--把sid为2的记录删除*
10. > insert into student3 values ('王五','女');

**二、重新设置identity的值**
**1.语法**
dbcc checkident(表名,reseed,n);
n+1表示的是表中identity字段的初始值(n的值可以为0)
也就是说:如果插入的是id为2的记录,则n的值是1
**2.实例演示**
1. > create table student4
2. > (
3. > sid int primary key identity,
4. > sname nchar(8) not null,
5. > ssex nchar(1)
6. > )
7. > insert into student4(sname,ssex) values ('张三','男');
8. > insert into student4 values ('李四','女');
9. > delete from student4 where sid=2;*--把sid为2的记录删除*
10. > dbcc
> checkident('student4',reseed,1);*--把student4表中identity字段的初始值重新设置为1*
11. > insert into student4 values ('王五','女');

**三、向identity字段插入数据**
**1.语法**
set identity\_insert 表名 on;
insert into 表名(列名1,列名2,列名3,列名4) values (数据1,数据2,数据3,数据4);
set identity\_insert 表名 off;
注意:插入数据时必须得指定identity修饰的字段的名字
**2.实例演示**
1. > create table student5
2. > (
3. > sid int primary key identity(20,5),
4. > sname nchar(8) not null,
5. > ssex nchar(1)
6. > )
7. > insert into student5(sname,ssex) values ('张三','男');
8. > insert into student5 values ('李四','女');
9. > insert into student5 values ('王五','女');
10. > set identity\_insert student5 on;
11. > */\**
12. > *insert into student5 values ('黑六','男');--error*
13. > *insert into student5 values (21,'黑六','男');--error*
14. > *\*/*
15. > insert into student5(sid,sname,ssex) values (21,'黑六','男');
16. > set identity\_insert student5 off;
17. > */\**
18. > *insert into student5 values (22,'赵七','女');--error*
19. > *insert into student5(sid,sname,ssex) values
> (22,'赵七','女');--error*
20. > *\*/*
21. > insert into student5 values ('赵七','女');
